﻿using HR.Models;
using System.Collections;
using System.Net.Mail;
using System.Text;

namespace HR.Config
{
    public class MailServer
    {
        //微软已经为我们准备好了现成的工具类供我们调用
        //MailMessage	邮件信息类
        //SmtpClient	邮件发送类
        /// <summary>
        /// 发送邮件工具方法
        /// </summary>
        /// <param name="mailTo">接收人邮件</param>
        /// <param name="mailTitle">发送邮件标题</param>
        /// <param name="mailContent">发送邮件内容</param>
        /// <returns></returns>
        public bool SendEmail(Mail mails)
        {
            //设置发送方邮件信息，例如：qq邮箱
            //string stmpServer = @"smtp.qq.com";//smtp服务器地址
            //string mailAccount = @"1760708378@qq.com";//邮箱账号
            //string pwd = @"duwvvjzdmmbqbjei";//邮箱密码（qq邮箱此处使用授权码，其他邮箱见邮箱规定使用的是邮箱密码还是授权码）

            string[] sArray = mails.fromPerson.Split(new char[2] { '@', '.' });
            if (sArray[1] == "qq")
            {
                mails.host = "smtp.qq.com";//如果是QQ邮箱则：smtp.qq.com,依次类推  163:smtp.163.com
            }
            else if (sArray[1] == "163")
            {
                mails.host = "smtp.163.com";//如果是QQ邮箱则：smtp.qq.com,依次类推  163:smtp.163.com
            }

            //将发件人邮箱带入MailAddress中初始化
            MailAddress mailAddress = new MailAddress(mails.fromPerson);
            //创建Email的Message对象 MailMessage
            MailMessage mailMessage = new MailMessage();

            //判断收件人数组中是否有数据
            if (mails.recipientArry.Any())
            {
                //循环添加收件人地址
                foreach (var item in mails.recipientArry)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }
            //判断抄送地址数组是否有数据  实则抄送人就等于收件人，有无均可
            if (mails.mailCcArray.Any())
            {
                //循环添加抄送地址
                foreach (var item in mails.mailCcArray)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }
            //发件人邮箱
            mailMessage.From = mailAddress;
            //标题
            mailMessage.Subject = mails.mailTitle;
            //编码
            mailMessage.SubjectEncoding = Encoding.UTF8;
            //正文
            mailMessage.Body = mails.mailBody;
            //正文编码
            mailMessage.BodyEncoding = Encoding.Default;
            //邮件优先级
            mailMessage.Priority = MailPriority.High;
            //正文是否是html格式
            mailMessage.IsBodyHtml = mails.isbodyHtml;
            //取得Web根目录和内容根目录的物理路径
            //string webRootPath = string.Empty;
            //添加附件
            //foreach (IFormFile item in mails.files)
            //{
            //    //路径拼接
            //    //webRootPath = _hostingEnvironment.WebRootPath + "\\" + "upload-file" + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + Path.GetFileNameWithoutExtension(item.FileName) + Path.GetExtension(item.FileName).ToLower();
            //    //创建文件流
            //    //using (var FileStream = new FileStream(webRootPath, FileMode.Create))
            //    //{
            //    //拷贝文件流
            //    //await item.CopyToAsync(FileStream);
            //    //释放缓存
            //    //FileStream.Flush();
            //    //}
            //    //再根据路径打开文件，得到文件流
            //    //FileStream stream = new FileStream(webRootPath, FileMode.Open);

            //    //添加至附件中
            //    //mailMessage.Attachments.Add(new Attachment(stream, item.FileName));
            //    mailMessage.Attachments.Add(new Attachment(item.OpenReadStream(), item.FileName));
            //};

            //实例化一个Smtp客户端
            SmtpClient smtp = new SmtpClient();
            //将发件人的邮件地址和客户端授权码带入以验证发件人身份
            smtp.Credentials = new System.Net.NetworkCredential(mails.fromPerson, mails.code);
            //指定SMTP邮件服务器
            smtp.Host = mails.host;

            //邮件发送到SMTP服务器
            smtp.Send(mailMessage);
            return true;
        }

        
    }
}
